#include <dht11.h> //温湿度库
#include <Servo.h> //舵机库

dht11 DHT11;       //温湿度传感器对象
Servo pole;        //晾衣杆对象 用舵机控制晾衣杆
int waterVal;      //水滴传感器值
int btnVal;        //按键值
int lastAngle;     //晾衣杆最后一次写入的角度
int bodyVal;       //检测人体
float hmdVal;      //湿度值

#include "wisdomDormInit.h"
#include "wisdomDorm.h"

void setup() {
  Serial.begin(9600);
  poleInit(); //初始化晾衣杆
}

void loop() {
  DHT11.read(DHT11_PIN);               //读取温湿度
  hmdVal = (float)DHT11.humidity;      //获取湿度值
  waterVal = analogRead(WATER);        //读取水滴传感器值
  bodyVal = analogRead(BODY_SENSOR);   //读取人体红外传感器值
  lastAngle = pole.read();             //读取晾衣杆最后一次写入的角度
  //  Serial.print("H: ");
  //  Serial.print(hmdVal, 2);
  //  Serial.println("%");
  //  Serial.print("W: ");
  //  Serial.println(waterVal);
  //  Serial.print("bodyVal:");
  //  Serial.println(bodyVal);
  //  Serial.print("lastAngle:");
  //  Serial.println(lastAngle);

  /*当检测到人体时 进入循环 晾衣杆由按键控制 这里是为了安全性考虑*/
  if (bodyVal > 200) {

    btnVal = digitalRead(BUTTON_PIN); //读取按键值
    //    Serial.print("btnVal:");
    //    Serial.println(btnVal);

    /*当按键按下且晾衣杆的上一次角度不为0度时 晾衣杆收回*/
    if (btnVal == HIGH && lastAngle != 0) {
      poleIn(lastAngle, 0); //从lastAngle度转到0度
    }
    /*当按键按下且晾衣杆的上一次角度不为180度时 晾衣杆放出*/
    if (btnVal == HIGH && lastAngle != 180) {
      poleOut(lastAngle, 180); //从lastAngle度转出到180度
    }

  } else { /*未检测到人体时*/

    if (hmdVal > 75.0 || waterVal > 400) { /*当湿度大于75时 或 下雨时舵机杆收回*/

      /*这里的判断是为了防止重复触发*/
      if (lastAngle != 0) {
        poleIn(lastAngle, 0); //从lastAngle度转到0度
      }
    } else { /*当湿度小于75时 且 不下雨时舵机杆放出*/

      /*这里的判断是为了防止重复触发*/
      if (lastAngle != 180) {
        poleOut(lastAngle, 180); //从lastAngle度转出到180度
      }
    }

  }
  //    delay(500);
}
